package com.alex.guava;

import com.google.common.util.concurrent.RateLimiter;

import java.util.concurrent.TimeUnit;

/**
 * Created by gaojun on 2017/12/1250.
 */
public class RateLimiterDemo {

    /**
     * 库存接口对应的Limiter, 具体限速值请根据开放平台为供应商提供的限流值进行配置.
     * 如果供应商为集群环境,需要根据集群数量进行限速值的拆分,如有2台服务器,限速总数为100,则限速值可粗略设置为50.
     *
     * 各个接口需要新建独立的RateLimiter,如价格同步接口,上下线状态同步接口等
     */
    private static final RateLimiter STOCK_RATE_LIMITER = RateLimiter.create(200);

    /**
     * 获取同步库存的请求许可
     * @return
     */
    public static boolean isStockAccessable() {
        // 获取请求许可的等待时间为1秒
        return STOCK_RATE_LIMITER.tryAcquire(1, TimeUnit.SECONDS);
    }

    /**
     * 进行美团库存信息同步
     * @return
     */
    public static boolean syncStock() {
        if (isStockAccessable()) {
            System.out.println("Sync stock info with 12121...");
            return true;
        }else {
            System.out.println("ERROR!Require rate limter failed!");
        }
        return false;
    }
}
